EVALUACIÓN Y
NO-EVALUACIÓN

“La actividad es la esencia de la sustancia en general” (Leibniz)

“Pero solamente debe llamarse ‘interpretación’ a esto: sustituir una expresión de la regla por otra” (Wittgenstein, Investigaciones Filosóficas)



Evaluación

Semántica

La evaluación de una expresión consiste en su sustitución por la parte derecha de su eexpresión de sustitución, si existe. A su vez, en la parte derecha pueden aparecer otras expresiones de sustitución, que a su vez se evalúan, en un proceso en cascada.

Cuando no existe especificación de sustitución para una expresión, entonces queda inalterada o, lo que es lo mismo, la expresión se autoevalúa (se evalúa como ella misma). Dicha expresión se dice que es “terminal”.


Sintaxis

No hay ningún operador explícito para especificar que se evalúe una expresión, pues, por defecto, toda expresión se evalúa automáticamente.


Justificación

La evaluación es un mecanismo simple, pero muy potente, que permite aplicar las expresiones de sustitución previamente definidas.


No-Evaluación

Semántica

No evaluar una expresión es autoevaluarla, es decir, que el resultado es la misma expresión, aunque exista una expresión de sustitución para ella previamente definida.


Sintaxis
Justificación

La “no-evaluación” es un mecanismo que nos permite tres cosas:
  1. Referirnos a las expresiones, tal y como se especifican (autoexpresiones).

  2. Facilitar procesos de evaluación diferida.

  3. Hacer referencia al nombre como contenedor o el equivalente a dirección.
El hecho de que se utilice un operador para la operación contraria está motivado por la mayor frecuencia de aparición de la “evaluación” que la de “no-evaluación”.


Ejemplos
  1. (x = 7)
    (x = x+1) // ev. x=8

    La primera x no se evalúa y sí la segunda.

  2. (x*2 + 1)°/(x° = 3) // ev. (3*2 + 1)
    (x*2 + 1)/(x° = 3) // ev. 7


  3. (x° = (3+2)°) // ev. (x = (3+2))

Evaluación diferida

La "no-evaluación" sirve para realizar la evaluación diferida, también llamada evaluación offline.

La evaluación normal (online) es la que se realiza de forma inmediata durante un proceso. En la evaluación diferida (offline), la expresión no se evalúa de forma inmediata, sino cuando se hace referencia a ella en un paso posterior.

La evaluación diferida es un mecanismo muy potente que nos permite definir expresiones parametrizadas, que se evalúan posteriormente con los valores de los parámetros (argumentos) en cada momento. Ello supone integrar estas definiciones como cualquier otra expresión dentro de un entorno dinámico.

Ejemplos:
  1. (y° = (x x+1 x+2)°) // ev. (y = (x x+1 x+2))
    (x = 0)
    y // ev. (0 1 2)
    (x = 5)
    y // ev. (5 6 7)


    Como se ve, cada vez que se hace referencia a y, se evalúa la expresión (x x+1 x+2) con el valor de x en cada momento.

  2. (y° = (2*x + 1)°) // ev. (y = (2*x + 1))
    (x = 3)
    y+9 // ev. (2*3 + 1 + 9) ev. 16
    (x = 4)
    y*y // ev. 9*9 ev. 81

“No-evaluación” como contenedor

En MENTAL no hay el equivalente a direcciones de memoria, sino solo nombres de expresiones en el espacio abstracto. Estos nombres desempeñan un papel análogo o equivalente a las direcciones. La evaluación de los nombres son los contenidos correspondientes. En general: Ejemplos:
  1. (x = abc)
    x\2 // ev. b (hace referencia al contenido de la segunda posición de x)
    (x\2)° // ev. x\2 (hace referencia a la segunda posición de x)
    (x\2 = u) // (sustituye el contenido de la segunda posición de x por u)
    x // ev. auc


  2. (x = {a b c}
    x↓ // ev. a b c (expresión abierta)
    (x↓ = u) // (sustituye el contenido de x por u)
    x // ev. {u}

Recursión

Es posible especificar evaluaciones diferidas de orden superior. La expresión x°° indica que hay una evaluación doblemente diferida, es decir, se requieren dos “usos” de x para que se evalúe. Análogamente para x°°°, x°°°°, etc.

Ejemplos:
  1. (x = (123+4)°°°) // ev. (x = (123+4)°°)
    (y = x) // ev. (y = (123+4)°)
    (z = y) // ev. (z = 123+4)
    (u = z) // ev. (u = 127)


  2. (x = 2)
    (y = (3*x + 1)°°) // ev. (y = 3*x + 1)°)
    (z = y) // ev. (z = 3*x + 1)
    (u = z) // ev. (u = (3*2 + 1)) ev. (u = 7)

Observaciones
Axiomas
  1. ( (°) = () ) // secuencia vacía

  2. ( {°} = {} ) // conjunto vacío